Many enterprises centralize their information technology operations in “data centers”, which perform computing operations and maintain storage on behalf of the enterprise's personnel. Computing operations are often performed by application servers, each of which is often executed within its own virtual machine (VM), an emulation of a physical machine, which can be executed by a physical computing device. Storage requirements are often provided by storage servers, which maintain blocks of storage that can be accessed by application servers and other devices using a network storage protocol.
It sometime occurs that it is difficult to allocate virtual machines to real devices (physical machines, which emulate those virtual machines). Although a set of multiple virtual machines can be allocated to a single real device, the real device cannot service demands made by that set, if those demands exceed the physical capacity of the real device.
It also sometime occurs that, even when virtual machines can all be allocated to real devices, it might occur that those virtual machines contend for resources available at the real device. This can have the effect of slowing those virtual machines, or otherwise making them less efficient.
Known methods include assigning virtual machines to each real device in a cluster so that requested memory usage is made to be as equal as possible. While this generally provides each virtual machine with its requested amount of memory, it can have the drawback of allocating other resources inefficiently. For example, it might occur that known methods allocate several virtual machines with heavy processor usage to the same real device.